//app.js
App({
  //用于存储全局数据
  globalData: {
    userInfo: null,
    openid: null, //小程序在加载时就自动获取用户openid
  },

  onLaunch: function () {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        // env 参数说明：
        //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境（第一个创建的环境）
        // env: 'my-env-id',
        traceUser: true,
        env: 'zhongbao-rkykq'
      })
    }
    this.globalData = {}
    this.getOpenid()  //打开小程序时，就自动获取用户的openid
  },

  //创建全局函数
  getOpenid() {
    var openidStor = wx.getStorageSync('openid'); //在缓存中存储用户openid
    if (openidStor) { //缓存中有 openid 则直接读取
      console.log('本地openid:', openidStor);
      this.globalData.openid = openidStor //将openid设置为全局变量
    } else { //没有，则重新获取
      wx.cloud.callFunction({
        name: 'getOpenid'
      }).then(res => {
        console.log('请求回来的openid', res)
        let openid = res.result.openid //获取openid
        wx.setStorageSync('openid', openid)
        this.globalData.openid = openid   //将用户openid保存为全局变量，并作为数据库表的 _id
      }).catch(err => {
        console.log('请求openid失败', err)
      })
    }
  },

  //获取用户信息，如果用户没有授权，就获取不到
  _getUserInfo() {
    wx.getUserInfo().then(res => {
      console.log('用户信息：', res)
      let user = res.userInfo
      user.openid = this.globalData.openid //手动为用户信息添加上openid，方便之后的操作
      this.globalData.userInfo = user //保存用户信息到小程序中
      // this._saveUserInfo(user) //保存userInfo到本地和数据库

      // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      if (this.userInfoReadyCallback) {
        this.userInfoReadyCallback(res)
      }
    }).catch(err=>{
      console.log('获取用户信息失败',err)
      let userStor = wx.getStorageSync('user')  //请求网络失败时，再读取本地数据，这样可以保证用户数据是最新的
      if(userStor){
        console.log('本地获取user信息',userStor)
        this.globalData.userInfo = userStor   //将用户信息保存在小程序中
      }
    })
  },

  //保存userInfo到本地和数据库
  _saveUserInfo(user) {
    this.globalData.userInfo = user  //将从网络获取的用户信息，保存在小程序中
    wx.setStorageSync('user', user)  //将用户信息 放入缓存，同时更新用户信息
    let userDB = wx.cloud.database().collection('user')  //链接用户数据库

    //1.查询数据库中用户的信息
    userDB.where({
      _id: this.globalData.openid   //通过openid可以唯一的查到数据库中该用户的信息
    }).get().then(res=>{
      if(res.data && res.data.length>0){  //表明数据库中有该用户的数据
        let dbUser = res.data[0].user
        console.log('用户数据获取成功',dbUser)
        if(dbUser.avatarUrl == user.avatarUrl && dbUser.nickName == user.nickName){ //将数据库中的信息与 重新获取的信息进行对比，以更新我们的数据库
          console.log('用户信息没有改变')
        }else{
          console.log('用户信息发生改变')
          this.uploadUserInfo(user, true) //true表示需要对用户数据进行更新
        }

      }else{  //表明数据库中没有该用户的数据
        console.log('数据库中未找到该用户')
        this.uploadUserInfo(user, false)  //false表述不需要对用户数据更新
      }

    }).catch(err=>{
      console.log('从数据库获取用户信息失败',err)
      this.uploadUserInfo(user, false)  //从数据库获取用户信息失败，也对用户数据进行更新
    })
  },

  //上传和更新用户信息 到 数据库
  uploadUserInfo(user, isUpdate){
    let userDB = wx.cloud.database().collection('user')  //链接用户数据库

    if(isUpdate){ //更新用户信息
      userDB.where({
        _id: this.globalData.openid
      }).update({
        data: {   //更改信息，只需要将 用户信息部分更新即可，不用添加 _id
          user
        }
      }).then(res=>{
        console.log('用户信息更新成功',res)
      }).catch(err=>{
        console.log('用户信息更新失败',err)
      })
    }else{
      userDB.add({  //添加 新用户信息
        data: {
          _id: this.globalData.openid,
          user
        }
      }).then(res=>{
        console.log('用户信息添加成功',res)
      }).catch(err=>{
        console.log('用户信息添加失败',err)
      })
    }
  },

  //错误提示
  showErrorToastUtils(e){
    wx.showModal({
      title: '提示！',
      confirmText: '我知道了',
      content: e
    }).then(res=>{
      if(res.confirm){
        console.log('提示出错后,用户点击了确定')
      }
    })
  },

  //打开权限设置页提示框
  _showSettingToast(e){
    wx.showModal({
      title: '提示！',
      confirmText: '去设置',
      content: e,
    }).then(res=>{
      if(res.confirm){
        wx.navigateTo({
          url: '/pages/setting/setting',
        })
      }
    })
  },

  //获取当前时间，返回时间格式 2018-09-16 15:43:36
  getNowFormatDate(){
    let date = new Date()  //获取日期
    let month = date.getMonth() + 1   //获取月份
    let strDate = date.getDate()  //获取 日
    if(month>=1 && month<=9){  //表示月份是个位数
      month = '0' + month
    }
    if(strDate>=0 && strDate<=9){
      strDate = '0' + strDate
    }
    //将最终的时间 进行 拼接
    let currentdate = date.getFullYear() + '-' + month + '-' + strDate + ' ' + date.getHours() + ':' + date.getMinutes() + ':' +date.getSeconds() 
    
    return currentdate  //返回当前时间
  }


})